/*
 * @Author: 13177709051 3506463075@qq.com
 * @Date: 2024-11-13 14:59:21
 * @LastEditors: 13177709051 3506463075@qq.com
 * @LastEditTime: 2024-11-13 15:56:31
 * @FilePath: /linux32/test.cpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
// const std::string ProtSep = " ";
// const std::string LineBreakSep = "\n";
// // "len\nx op y\n" : \n 不属于报文的一部分，约定std::string Encode(const std::string &message)
// {
//     std::string len = std::to_string(message.size());
//     std::string package = len + LineBreakSep + message +
//                           LineBreakSep;
//     return package;
// }
// // "len\nx op y\n" : \n 不属于报文的一部分，约定// 我无法保证 package 就是一个独立的完整的报文
// // "l
// // "len
// // "len\n
// // "len\nx
// // "len\nx op
// // "len\nx op y
// // "len\nx op y\n"
// // "len\nx op y\n""len
// // "len\nx op y\n""len\n
// // "len\nx op
// // "len\nx op y\n""len\nx op y\n"
// // "len\nresult code\n""len\nresult code\n"
// bool Decode(std::string &package, std::string *message)
// {
//     // 除了解包，我还想判断报文的完整性, 能否正确处理具有"边界"的报文
//     auto pos = package.find(LineBreakSep);
//     if (pos == std::string::npos)
//         return false;
//     std::string lens = package.substr(0, pos);
//     int messagelen = std::stoi(lens);
//     int total = lens.size() + messagelen + 2 * LineBreakSep.size();
//     if (package.size() < total)
//         return false;
//     // 至少 package 内部一定有一个完整的报文了！
//     *message = package.substr(pos + LineBreakSep.size(),
//                               messagelen);
//     package.erase(0, total);
//     return true;
// }

// #include <iostream>
// #include <string>
// #include <jsoncpp/json/json.h>

// int main()
// {
//     Json::Value root;
//     root["name"] = "joe";
//     root["sex"] = "男";
//     std::cout << root << std::endl;
//     return 0;
// }

// #include <iostream>
// #include <string>
// #include <sstream>
// #include <memory>
// #include <jsoncpp/json/json.h>

// int main()
// {
//     Json::Value root;
//     root["name"] = "joe";
//     root["sex"] = "男";
//     Json::StreamWriterBuilder swb;// StreamWriter 的工厂
//     std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
//     std::stringstream ss;
//     sw->write(root, &ss);
//     std::cout << ss.str() << std::endl;
//     return 0;
// }

// #include <iostream>
// #include <string>
// #include <sstream>
// #include <memory>
// #include <jsoncpp/json/json.h>

// int main()
// {
//     Json::Value root;
//     root["name"] = "joe";
//     root["sex"] = "男";
//     Json::FastWriter writer;
//     std::string s = writer.write(root);
//     std::cout << s << std::endl;
//     return 0;
// }

// #include <iostream>
// #include <string>
// #include <sstream>
// #include <memory>
// #include <jsoncpp/json/json.h>

// int main()
// {
//     Json::Value root;
//     root["name"] = "joe";
//     root["sex"] = "男";
//     // Json::FastWriter writer;
//     Json::StyledWriter writer;
//     std::string s = writer.write(root);
//     std::cout << s << std::endl;
//     return 0;
// }

#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
int main()
{
    // JSON 字符串
    std::string json_string = "{\"name\":\"张三\",\"age\":30, \"city\":\"北京\"}";
    // 解析 JSON 字符串
    Json::Reader reader;
    Json::Value root;
    // 从字符串中读取 JSON 数据
    bool parsingSuccessful = reader.parse(json_string, root);
    if (!parsingSuccessful)
    {
        // 解析失败，输出错误信息
        std::cout << "Failed to parse JSON: " << reader.getFormattedErrorMessages() << std::endl;
        return 1;
    }
    // 访问 JSON 数据
    std::string name = root["name"].asString();
    int age = root["age"].asInt();
    std::string city = root["city"].asString();
    // 输出结果
    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;
    std::cout << "City: " << city << std::endl;
    return 0;
}